#DataBase #NoSQL
NoSQL
[!question]+ What is NoSQL
- Not Only SQL
- NoSQL 是一个总称 不遵循 RDBMS 原则的数据库和数据存储
- 一类产品
- 有关数据存储和操作的多个(相关)概念的集合
- 通常与大型数据集有关
[!question]+ 为什么不用RDBMS 在互联网背景下
- RDBMS 假定数据是
- 密集
- 基本一致(结构化数据)
- 来自互联网的数据是
- 大量且稀疏
- 半结构化或非结构化
- 面对海量稀疏数据集,典型的存储机制和访问方法变得捉襟见肘
- 稀疏的非/半结构化数据
- 高水平可扩展性
NoSQL数据库类型
- 图数据库: [[Neo4j]]
- 用于存储数据网络信息,如社交关系。
- 文档数据库: [[MongoDB]]
- 将每个键与称为文档的复杂数据结构配对。
- 键值数据库: [[Redis]]
- 是最简单的 NoSQL 数据库。数据库中的每个项目都以属性名称(或 "键")的形式与其值一起存储。
- 列族数据库:[[Cassandra]]
- 针对大型数据集的查询进行了优化,将数据列(而不是行)存储在一起
图数据库
- 面向图形
- 一切都以边、节点或属性的形式存储
- 每个节点和边可以有任意数量的属性
- 节点和边都可以贴标签
- 标签可用于缩小搜索范围
- 适用场景: 网络型
- 社交网络
- 金融领域
- 交通网络
- 计算机通信网络
- 智能电网
- ...
文档数据库
- 核心概念是 "文档 "的概念,它与 RDBMS 中的行相对应
- 以某些标准格式或编码封装和编码数据,如 JSON(BSON)
- 文档在数据库中通过代表该文档的唯一密钥进行处理
- 将文档作为一个整体处理,避免将文档拆分为其组成的名称/值对
- 数据库提供 API 或查询语言,可根据文档内容检索文档
- 文档是无模式的,也就是说,不同的文档可以有不同的结构和模式(RDBMS 要求每一行都包含相同的列)
- 适用场景:评论型
- 内容管理系统
- 电子商务平台
- 社交网络
- 日志管理系统
- ...
键值数据库
- 以无模式方式存储数据
- 以映射方式存储数据
- 哈希映射或关联数组
- 为访问数据提供非常高效的平均运行时间算法
- 特点
- 简洁:数据主要采用Key-Value(KV)形式储存
- 高速:数据驻留内存,重启时可再次加载进行使用
- 易扩展:根据系统负载量,灵活添加或删除服务器
- 对键可设置失效时间
- 适用场景
- 缓存
- 用户会话管理
- 分布式锁
- 分布式配置管理
- 分布式存储系统
列族数据库
以列为导向的方式存储数据
- 有效存储数据
- 避免消耗空间来存储空值
- 以列族对列进行分组
- 数据不存储为单一表格,而是按列族存储
- 数据单位是一组键/值对
- 用 "行键 "标识
- 根据行键排序与筛选
特点
- 更好的可扩展性
- 高可用性
- 适合离线批量数据处理
- 支持跨平台部署
适用场景
- 数据仓库
- 数据挖掘和商业智能
- 实时数据分析
- 大规模数据集成
处理大数据和可扩展性
NoSQL 解决方案设计用于在集群或多节点数据库解决方案上运行
- 如果数据量/操作量较大,则需要在集群中添加更多机器,即 "向外扩展 "或 "水平扩展"。
- 不同的方法包括
- 主从(Master-slave)
- 分片(Sharding)
CAP 定理
分布式存储系统必然存在如下三方面问题
- 一致性(Consistency)
- 每个客户端都有相同的数据视图
- 可用性(Availability)
- 每个客户端始终可以读写
- 分区容错性(Partition Tolerance)或稳定性
- 系统在分布式物理网络中运行良好
CAP 定理 - 最多可以处理三个属性中的两个属性
- 满足CA原则:系统几乎没有或根本没有分区容错性。一致性和可用性优先
- RDBS
- 满足AP原则:一致性受到影响,但系统始终可用,并且在部分分区时也能工作
- CouchBD, Cassandra, DynamoDB, Riak
- 满足CP原则:可用性受到影响,但一致性和分区容错性优于可用性
- MongoDB, HBase, Redis
没有完美的 NoSQL 数据库
- 每个数据库都有其优缺点
- 取决于要完成的任务类型(和偏好)
- NoSQL 是一套处理以下问题的概念、想法、技术和软件
- 大数据
- 稀疏的非/半结构化数据
- 高水平可扩展性
- 大规模并行处理
- 不同的应用、目标、对象和方法需要不同的 NoSQL 解决方案
ACID事务
- 原子性
Atomicity
- 一致性
Consistency
- 隔离性
Isolation
- 持久性
Durability
- NoSQL
- 不重视 ACID 特性,在某些情况下完全忽略
- 在分布式并行系统,很难/不可能确保 ACID 属性
BASE事务
- 基本可用性
Basically Available
- 软状态
Soft State
- 最终一致
Eventually Consistent
- 特点
- 弱一致性可用性优先
- 尽最大努力
- 近似答案
- 进取(乐观)
- 更简单、更快速
一致性问题
NoSQL分布式集群系统由多个节点构成
由于网络异常、服务器故障等原因,节点并不总能保证正常工作
分布式系统采用多数据副本来保证可用性
严格一致性
“读己之所写”一致性
会话一致性
单调读一致性
最终一致性
Quorum的NWR策略
- N: 副本数
- R: 写入副本数
- W: 写入副本数
Paxos Algorithm
- 提议者
Proposer
- 决策者
Acceptor
- 学习者
Learner
- Request
- Prepare
- Accept
- Response
Raft Algorithm
- 领导者
Leader
: 1 个,接受服务端的请求 - 候选者
Candidate
: 多个,选举领导者 - 追随者
Follower
: 多个,负责响应来自领导者或者候选者的请求
- 每个任期至多存在一个领导者
- 默写任期又要选举失败,不存在 Leader
- 每个服务器本地维护当前任期
子问题
- 领导者选举
Leader Election
- 日志复制
Log Replication
- 安全性
Safety